package com.demo.java.OD301_350.OD345;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【文件目录大小(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146160006
 */
public class OdMain {
    public static Map<Integer, List<Integer>> dataMap = new HashMap<>();
    public static Map<Integer, Integer> cacheMap = new HashMap<>();

    // 解析每个目录的子目录数据
    public static List<Integer> split(String str) {
        List<Integer> result = new ArrayList<>();
        String trimmedStr = str.substring(1, str.length() - 1); // 去掉括号
        if (trimmedStr.isEmpty()) {
            return result;
        }

        String[] nums = trimmedStr.split(",");
        for (String num : nums) {
            result.add(Integer.parseInt(num)); // 转换为整数并加入结果
        }
        return result;
    }

    // 使用DFS递归计算目录的总大小
    public static int dfs(int n) {
        if (cacheMap.containsKey(n)) {
            return cacheMap.get(n); // 如果已经计算过，直接返回结果
        }

        int result = 0;
        if (dataMap.containsKey(n)) {
            List<Integer> data = dataMap.get(n);
            result = data.get(0); // 当前目录的大小
            for (int i = 1; i < data.size(); i++) {
                result += dfs(data.get(i)); // 累加子目录的大小
            }
        }

        cacheMap.put(n, result); // 缓存计算结果
        return result;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入
        int m = scanner.nextInt(); // 目录数
        int n = scanner.nextInt(); // 目标目录
        scanner.nextLine(); // 清空缓冲区

        // 读取每个目录及其子目录信息
        for (int i = 0; i < m; i++) {
            int a = scanner.nextInt(); // 目录编号
            int b = scanner.nextInt(); // 目录的大小
            String c = scanner.next(); // 子目录数据

            dataMap.putIfAbsent(a, new ArrayList<>());
            List<Integer> data = dataMap.get(a);
            data.add(b); // 将目录的大小加入列表
            data.addAll(split(c)); // 将子目录数据添加到列表中
        }

        // 计算目标目录及其子目录的总大小
        int res = dfs(n);
        System.out.println(res); // 输出结果
    }
}